﻿'    DotNetIRCD - An IRC Daemon written in VB.Net
'    Copyright (C) 2012 GeorgeBush
'
'    This program is free software: you can redistribute it and/or modify
'    it under the terms of the GNU General Public License as published by
'    the Free Software Foundation, either version 2 of the License, or
'    (at your option) any later version.
'
'    This program is distributed in the hope that it will be useful,
'    but WITHOUT ANY WARRANTY; without even the implied warranty of
'    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
'    GNU General Public License for more details.
'
'    You should have received a copy of the GNU General Public License
'    along with this program. If not, see <http://www.gnu.org/licenses/>.

''' <summary>
''' 
''' </summary>
<HideModuleName()> _
Module ChannelModesModule

    ''' <summary>
    ''' 
    ''' </summary>
    Public Structure ChannelMode

        ''' <summary>
        ''' 
        ''' </summary>
        Public Mode As String

        ''' <summary>
        ''' 
        ''' </summary>
        Public Name As String

        ''' <summary>
        ''' 
        ''' </summary>
        Public Description As String

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <param name="Mode"></param>
        ''' <param name="Name"></param>
        ''' <param name="Description"></param>
        Sub New(ByVal Mode As String, ByVal Name As String, ByVal Description As String)

            Me.Mode = Mode
            Me.Name = Name
            Me.Description = Description

        End Sub

    End Structure

    ''' <summary>
    ''' 
    ''' </summary>
    Public ChannelModes() As ChannelMode = _
        {New ChannelMode("v", "VOICE", "User has Voice and can speak in a Moderated (+m) channel"),
         New ChannelMode("h", "HALF_OP", "User is a channel Half-Operator"),
         New ChannelMode("o", "OPERATOR", "User is a channel Operator"),
         New ChannelMode("a", "ADMIN", "User is a channel Administrator, Implies +o"),
         New ChannelMode("q", "OWNER", "Gives the nickname channel owner status"),
         New ChannelMode("b", "BAN", "Bans the specified mask from the channel"),
         New ChannelMode("c", "NO_COLOR_BLOCK", "Blocks messages containing mIRC colours from the channel"),
         New ChannelMode("e", "BAN_EXCEPTION", "Creates a ban exception using the given mask"),
         New ChannelMode("I", "INVITATION_MASK", "If the channel is marked as invite only, users matching the mask(s) set using this mode are allowed to enter without invitation"),
         New ChannelMode("f", "FLOOD_LIMIT", "Flood limiter"),
         New ChannelMode("i", "INVITE_ONLY", "Marks the channel as invite only. When set, clients must be invited using the /INVITE command"),
         New ChannelMode("j", "JOIN_THROTTLE", "When set, users may join this channel once every 'frequency' seconds with an initial burst and limit value of 'limit' users"),
         New ChannelMode("k", "CHAN_KEY", "Locks the channel with the given password, which must be specified via the /JOIN command"),
         New ChannelMode("l", "MAX_USERS", "Limits the channel to only allow the given number of members to be in the channel while the mode is set"),
         New ChannelMode("m", "MODERATED", "The channel is being moderated, only users who have a voice are able to talk"),
         New ChannelMode("n", "NO_EXTERNAL_MSGS", "Disallows messages from users who are not channel members entering the channel"),
         New ChannelMode("p", "PRIVATE", "Marks the channel as private"),
         New ChannelMode("r", "REGISTERED", "Channel is registered with a network channel service"),
         New ChannelMode("s", "SECRET", "Marks the channel as secret hiding it from the /LIST command"),
         New ChannelMode("t", "TOPIC_LOCK", "Topic is locked, and can only be changed by channel operators"),
         New ChannelMode("z", "SECURED_ONLY", "Only allows clients connected via secure connections to join (e.g. SSL/TLS)"),
         New ChannelMode("A", "ADMIN_ONLY", "Only Server/Network Administrators can join the channel"),
         New ChannelMode("C", "NO_CTCP", "Stops people from sending CTCP commands to the channel"),
         New ChannelMode("G", "STRIP_BAD_WORDS", "Strips profanity from messages in the channel"),
         New ChannelMode("M", "REGONLY_TALK", "Channel only allows registered nicknames to talk in the channel"),
         New ChannelMode("K", "NO_KNOCK", "Disables people using /KNOCK'ing on the channel"),
         New ChannelMode("L", "LINK", "If the channel is full, users will be redirected to the given channel"),
         New ChannelMode("N", "NO_NICK_CHANGE", "Disallow Nickname changes"),
         New ChannelMode("O", "IRCOP_ONLY", "Channel only allows IRC Operators to join"),
         New ChannelMode("Q", "NO_KICK", "Disallow people being kicked from the channel"),
         New ChannelMode("R", "REGONLY_JOIN", "Channel only allows registered nicknames to join the channel"),
         New ChannelMode("S", "NO_COLOR_STRIP", "Strip mIRC colours from messages in the channel"),
         New ChannelMode("T", "NO_NOTICE", "No NOTICE's allowed in the channel"),
         New ChannelMode("V", "NO_INVITE", "Stops channel members inviting people"),
         New ChannelMode("u", "AUDITORIUM", "When set, makes /NAMES and /WHO only show channel operators")}

    ''' <summary>
    ''' 
    ''' </summary>
    Public ChannelModeList As String = "vhoaqbceIfijklmnprstzACGMKLNOQRSTVu"

End Module